package com.kds.fxtool;

import com.kds.fxtool.config.AppConfig;
import com.kds.fxtool.config.SceneManager;
import com.kds.fxtool.service.UpdateService;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.stage.Stage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class LoginApplication extends Application {
    private static final Logger logger = LoggerFactory.getLogger(LoginApplication.class);
    
    @Override
    public void start(Stage primaryStage) {
        try {
            // 设置主舞台
            SceneManager.setPrimaryStage(primaryStage);

            // 初始显示登录页面
            SceneManager.returnToLogin();

            // 显示窗口
            SceneManager.showStage();

            // 设置关闭请求处理
            primaryStage.setOnCloseRequest(event -> {
                System.exit(0);
            });

            // 后台检查更新（使用现代异步方式）
            checkForUpdates();

            logger.info("智能管理系统 v{} 启动成功", AppConfig.getVersion());
        } catch (Exception e) {
            logger.error("启动应用程序时发生错误", e);
            showErrorAlert("启动应用程序时发生错误: " + e.getMessage());
        }
    }

    private void checkForUpdates() {
        String currentVersion = AppConfig.getVersion();
        logger.info("当前版本: {}", currentVersion);

        // 使用现代异步方式检查更新
        UpdateService.checkForUpdatesAsync(currentVersion,new UpdateService.UpdateCheckCallback() {
            @Override
            public void onUpdateAvailable(UpdateService.VersionInfo versionInfo) {
                Platform.runLater(() -> showUpdateDialog(versionInfo));
            }

            @Override
            public void onNoUpdateAvailable() {
                logger.info("当前已是最新版本");
            }

            @Override
            public void onCheckFailed(String errorMessage) {
                logger.warn("检查更新失败: {}", errorMessage);
            }
        });
    }
    
    private void showUpdateDialog(UpdateService.VersionInfo versionInfo) {
        try {
            boolean updateAccepted = com.kds.fxtool.controller.UpdateDialogController.showUpdateDialog(versionInfo);
            if (updateAccepted) {
                logger.info("用户接受了更新: {}", versionInfo.version());
            } else {
                logger.info("用户拒绝了更新");
            }
        } catch (Exception e) {
            logger.error("显示更新对话框失败", e);
        }
    }
    
    private void showErrorAlert(String message) {
        Platform.runLater(() -> {
            javafx.scene.control.Alert alert = new javafx.scene.control.Alert(javafx.scene.control.Alert.AlertType.ERROR);
            alert.setTitle("启动错误");
            alert.setHeaderText("无法启动应用程序");
            alert.setContentText(message);
            alert.showAndWait();
        });
    }
    
    public static void main(String[] args) {
        // 设置系统属性
        System.setProperty("java.net.useSystemProxies", "true");
        
        logger.info("启动智能管理系统 v{}", AppConfig.getVersion());
        launch(args);
    }
}